1
Внутренняя архитектура: указатели klass и super
AI035Lesson 14
00:00

На уровне С, объекты Ruby представлены структурами, которые разделяют данные и поведение с помощью иерархии указателей. Указатель klass связывает экземпляр с его «сопутствующим классом» (где живут методы), в то время как указатель super связывает классы с их предками, создавая структурную карту, которую использует виртуальная машина Ruby для разрешения наследования.

1. Указатель klass и флаги

Каждый объект Ruby содержит заголовок с указателем klass и битовой маской флагов. Эти флаги определяют внутреннее состояние объекта, например, помечая автоматически созданные «виртуальные классы» флагом 'V' для обработки назначений методов-одиночек.

2. Разделение состояния (Рисунок 24.1)

Экземпляр, такой как lucille хранит собственные уникальные экземпляры переменных, но у него нет своих методов. Его klass указывает виртуальной машине на Guitar таблицу методов объекта класса.

lucille@valueКласс: Guitarplay()strings()VКласс: Objectclone(), dup()klasssuper

3. Цепочка наследования

Когда lucille.play() вызывается, Ruby следует по klass указателю. Если метод не найден в Guitar, он следует по super указателю на Object, предоставляя доступ к clone или dup.

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>